#include "p30F6010.h"

unsigned int uiAmarantaAdcResul, puiAmarantaAdcResultadoCanalAdc[4];

void vAmarantaAdcInit(){

	/* CONFIGURACION DEL MODULO ADC */
	TRISBbits.TRISB8	= 1;			/* RB[8] ENTRADA ANALOGA Vi0 */
	TRISBbits.TRISB9	= 1;			/* RB[9] ENTRADA ANALOGA Vi1 */
	TRISBbits.TRISB10	= 1;			/* RB[10] ENTRADA ANALOGA Vi2 */
	TRISBbits.TRISB11	= 1;			/* RB[11] ENTRADA ANALOGA Vi3 */
	ADPCFGbits.PCFG8 	= 0;  			/* AN8 ENTRADA ANALOGA */
	ADPCFGbits.PCFG9 	= 0;  			/* AN9 ENTRADA ANALOGA */
	ADPCFGbits.PCFG10 	= 0;  			/* AN10 ENTRADA ANALOGA */
	ADPCFGbits.PCFG11 	= 0;  			/* AN11 ENTRADA ANALOGA */

	ADCON1bits.FORM	    = 0;			// SALIDA EN FORMATO INT --------------------------------------------------------
	ADCON3bits.ADCS		= 19;			/* EL DIVISOR DE RELOJ SE CONFIGURA PARA 10*Tcy */	

	/* SE ESCANEAN LAS 16 ENTRADAS Y LUEGO SE INTERRUMPE */
	ADCON2bits.SMPI		= 0x3;			/* SE INTERRUMPE AL MUESTREAR LA CUARTA ENTRADA ANALOGA */
	ADCON2bits.CHPS		= 0;			/* MUESTREA POR EL CANAL 0 */
	ADCON2bits.BUFM		= 0;			/* EL BUFFER DE RESULTADOS SE CONFIGURA EN 16 BITS */
	ADCON2bits.BUFM		= 0;			/* UTILIZAR EL MUX A COMO ENTRADA */
	
	ADCON2bits.VCFG		= 0;			/* SE CONFIGURA EL VOLTAGE DE REFERENCIA VH=VDD Y VL=VSS */
	ADCHSbits.CH0NA		= 0; 			/* SELECCIONA EL VREF PARA EL CANAL 0 */
	ADCON2bits.CSCNA	= 1;			/* ESCANEA LAS ENTRADAS POR EL CANAL 0 */

	ADCSSLbits.CSSL8	= 1;			/* ESCANEA LA ENTRADA ANALOGA AN8 */
	ADCSSLbits.CSSL9	= 1;			/* ESCANEA LA ENTRADA ANALOGA AN9 */
	ADCSSLbits.CSSL10	= 1;			/* ESCANEA LA ENTRADA ANALOGA AN10 */
	ADCSSLbits.CSSL11	= 1;			/* ESCANEA LA ENTRADA ANALOGA AN11 */
		
	/* CONFIGURACION DE LAS INTERRUPCIONES */	
	IFS0bits.ADIF 		= 0;            /* LIMPIA LA BANDERA DE INTERRUPCION DEL ADC */	
	IEC0bits.ADIE		= 1;            /* HABILITA LA INTERRUPCION DEL ADC */		

}
 /*RUTINA DE INTERRUPCION DEL ADC*/
void __attribute__ ((__interrupt__)) _ADCInterrupt(void)
{		
	IFS0bits.ADIF   			= 0;          	/* LIMPIA LA BANDERA DE INTERRUPCION DEL ADC */

	puiAmarantaAdcResultadoCanalAdc[0]  	= ADCBUF0;      /* SE OBTIENEN LOS RESULTADOS DE LA CONVERSION */
	puiAmarantaAdcResultadoCanalAdc[1]  	= ADCBUF1;		/* Y SE ALMACENAN EN EL BUFFER PARA SU POSTERIOR USO */
	puiAmarantaAdcResultadoCanalAdc[2]  	= ADCBUF2;
	puiAmarantaAdcResultadoCanalAdc[3]  	= ADCBUF3;
	uiAmarantaAdcResul=1;								/* BANDERA QUE AVISA QUE YA SE TIENE UN NUEVO RESULTADO DE LA CONVERSION EN EL ADC */
}
